import jieba
import re
import jieba.posseg as pseg

filePath = "data/news.txt" # 对新闻进行分词
dt = []

with open(filePath, 'r', encoding='utf-8') as sourceFile:
    lines = sourceFile.readlines()
    for line in lines:
        line_1 = line.replace(' ', '')  # 替换文本的空格
        pattern = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")  # 去掉文本中符号，只保留英文和数字
        # re.sub 三个参数 pattern(该参数表示正则中的模式字符串) repl(该参数表示要替换的字符串，即匹配到pattern后替换为repl) string(该参数表示要被处理的原始字符串)
        line_2 = re.sub(pattern, '', line_1)
        seg = jieba.lcut(line_2, cut_all=False)
        for i in range(len(seg)):
            if seg[i] not in dt:
                dt.append(seg[i])
        print(len(dt))
        print(dt)


# 前向最大匹配算法
def forword_Match(text, Dict):
    word_list = []
    pi = 0  # 初始位置
    m = max([len(word) for word in Dict])     # 找出字典中的最长的词的长度
    while pi != len(text):
        n = len(text[pi:])  # 当前指针到字符串末尾的长度
        if n < m:
            m = n
        for index in range(m, 0, -1):  # 从当前 pi 起取 m 个汉字作为词
            if text[pi:pi + index] in Dict:
                word_list.append(text[pi:pi + index])
                pi = pi + index  # 根据词的长度修改指针pi
                break
    print('/'.join(word_list), len(word_list))
##逐句输出分词结果和每句话分词个数
with open(filePath, 'r', encoding='utf-8') as sourceFile:
    lines = sourceFile.readlines()
    for line in lines:
        line1 = line.replace(' ', '')  # 去掉文本中的空格
        pattern = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")  # 只保留中英文、数字，去掉符号
        line2 = re.sub(pattern, '', line1)  # 把文本中匹配到的字符替换成空字符
        forword_Match(line2, dt)
